package com.ktjiaoyu.config;

import com.ktjiaoyu.cond.ConditionOnPropertyEnable;
import com.ktjiaoyu.entity.Storage;
import com.ktjiaoyu.entity.Supplier;
import com.ktjiaoyu.entity.SysRole;
import com.ktjiaoyu.entity.SysUser;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;

/**
 * @return 13141
 * 2025/6/25
 * 20:48
 */
// 定义配置类
@Configuration
// 指定读取外部配置文件，value指定路径，encoding指定读取时的字符编码
@PropertySource(value = "classpath:user.properties", encoding = "UTF-8")
public class JavaConfig {
    // 使用 @Value 注解可以读取配置文件中指定的值
    @Value("${user.realName}")
    private String realName;
    @Value("${user.account}")
    private String account;
    @Value("${user.password}")
    private String password;
    @Value("${user.sex}")
    private int sex;
    // 定义 bean 对象
    @Bean
    // 也可以通过注解的 name 属性修改 bean 名称
    // @Bean(name="user1")
    public SysUser user(SysRole role) {
        SysUser user = new SysUser();
        user.setRealName(realName);
        user.setAccount(account);
        user.setPassword(password);
        user.setSex(sex);
        user.setRole(role);
        // 返回对象会被注册到 Spring 容器中
        return user;
    }
    // 注册“管理员”角色 bean 对象
    @Bean
    // 表示主要对象，没有指定则默认使用此对象
//    @Primary
    @Conditional(ConditionOnPropertyEnable.OnEnableCondition.class)
    // 表示如果配置文件中 admin.enable=true 则需要此 Bean 对象，否则不需要
    @ConditionOnPropertyEnable(enableProperty = "admin.enable")
    public SysRole adminRole() {
        SysRole role = new SysRole();
        role.setId(1L);
        role.setRoleName("管理员");
        role.setCode("ADMIN");
        return role;
    }
    // 注册“店长”角色 bean 对象
    @Bean
    @Conditional(ConditionOnPropertyEnable.OnEnableCondition.class)
    // 表示如果配置文件中 manager.enable=true 则需要此 Bean 对象，否则不需要
    @ConditionOnPropertyEnable(enableProperty = "manager.enable")
    public SysRole managerRole() {
        SysRole role = new SysRole();
        role.setId(2L);
        role.setRoleName("店长");
        role.setCode("MANAGER");
        return role;
    }
}
